package com.summer.handler;

import org.apache.log4j.Logger;

import com.summer.processor.MessageTemplateSendAction;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelFutureListener;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.channel.ChannelHandler.Sharable;
import io.netty.util.CharsetUtil;

@Sharable
public class TaskServerHandler extends ChannelInboundHandlerAdapter{
	private Logger log = Logger.getLogger(TaskServerHandler.class);
	@Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) {
        ByteBuf in = (ByteBuf) msg;
        String send_id = in.toString(CharsetUtil.UTF_8);
        try{
        	Integer.parseInt(send_id.trim());
        }catch (NumberFormatException e) {
        	log.info("非法字符: " + send_id);
        	return ;
		}
        
        System.out.println("Server received: " + send_id);	//⇽---  将消息记录到控制台 
        log.info("send_id: " + send_id);
        new MessageTemplateSendAction().doAction(send_id);
        ctx.write(in);																//⇽---　将接收到的消息写给发送者，而不冲刷出站消息
        
    }

    @Override
    public void channelReadComplete(ChannelHandlerContext ctx) {
        ctx.writeAndFlush(Unpooled.EMPTY_BUFFER).addListener(ChannelFutureListener.CLOSE);   //⇽---　将未决消息冲刷到远程节点，并且关闭该Channel
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx,Throwable cause) {
        cause.printStackTrace();	//⇽---  打印异常栈跟踪
        ctx.close();				//⇽---　关闭该Channel
    }
    
}
